package com.mastercard.assets.web.struts.forms ;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblUsuario;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.util.to.ManejadorPaquetesSolicitar;
import com.mastercard.assets.web.util.to.PaqueteSolicitar;
import com.mastercard.assets.web.util.to.UserLogin;

public class SolicitarPaqueteRegistrarForm
	extends
		ActionForm
{
	private ManejadorPaquetesSolicitar packageManager = new ManejadorPaquetesSolicitar( ) ;
	
	private int cveCuenta ;
	private int cveTipoCuenta ;
	
	private String[] asignar = new String[ 0 ] ;
	private String[] regresar = new String[ 0 ] ;
	
	private int[] asignarInt = new int[ 0 ] ;
	private int[] regresarInt = new int[ 0 ] ;
	
	public String[] getAsignar() {
		return asignar;
	}

	public void setAsignar(String[] asignar) {
		this.asignar = asignar;
	}

	public String[] getRegresar() {
		return regresar;
	}

	public void setRegresar(String[] regresar) {
		this.regresar = regresar;
	}

	public int getCveTipoCuenta() {
		return cveTipoCuenta;
	}

	public void setCveTipoCuenta(int cveTipoCuenta) {
		packageManager.setCveTipoCuenta( cveTipoCuenta ) ;
		this.cveTipoCuenta = cveTipoCuenta;
	}

	public int getCveCuenta() {
		return cveCuenta;
	}

	public void setCveCuenta(int cveCuenta) {
		packageManager.setCveCuenta( cveCuenta ) ;
		this.cveCuenta = cveCuenta;
	}

	public ManejadorPaquetesSolicitar getPackageManager( ) {
		return packageManager;
	}

	public void setPackageManager(ManejadorPaquetesSolicitar packageManager) {
		this.packageManager = packageManager;
	}

	public ActionErrors validate( ActionMapping mapping , HttpServletRequest request )
	{
		ActionErrors errors = new ActionErrors( ) ;
		
		// inicializa
		try
		{
			packageManager.initialize( ) ;
		}catch( Exception e )
		{
			e.printStackTrace( ) ;
		}
		
//		// lee los arreglos
//		if( asignar == null )
//			System.out.println( "Asignar es null" ) ;
//		else
//		{
//			System.out.println( "Tamanio de Asignar: " + asignar.length ) ;
//			for( String s : asignar )
//				System.out.println( "Asignar: " + s ) ;
//		}
//		
//		if( asignar == null )
//			System.out.println( "Regresar es null" ) ;
//		else
//		{
//			System.out.println( "Tamanio de Regresar: " + regresar.length + " y " + packageManager.getPaqueteSolicitarLista( ).size( ) ) ;
//			for( String s : regresar )
//				System.out.println( "Regresar: " + s ) ;
//		}		
//		
//		System.out.println( "CveCuenta: " + cveCuenta ) ;
//		System.out.println( "CveTipoCuenta: " + cveTipoCuenta ) ;
//		
		// rellena los campos de enteros
		asignarInt = new int[ asignar.length ] ;
		regresarInt = new int[ regresar.length ] ;
		
		int index = 0 ;
		
		// recorre las cadenas
		for( String asig : asignar )
			// intenta convertir a entero
			try
			{
				asignarInt[ index ] = Integer.parseInt( asig ) ;
				
				index++ ;
			}catch( Exception e )
			{
				asignarInt[ index++ ] = 0 ;
			}
		
		
		index = 0 ;
		
		// recorre las cadenas
		for( String regr : regresar )
			// intenta convertir a entero
			try
			{
				regresarInt[ index ] = Integer.parseInt( regr ) ;
				
				index++ ;
			}catch( Exception e )
			{
				regresarInt[ index++ ] = 0 ;
			}
		
			
		// indice
		index = 0 ;
		
		// verifica si la cantidad de asignaciones es mayor a los paquetes disponibles
		List< PaqueteSolicitar > paquetesSol = packageManager.getPaqueteSolicitarLista( ) ;
		// recorre las asignaciones
		for( int i = 0 ; i < asignarInt.length ; i++ )
		{
			// obtiene el numero de disponibles
			PaqueteSolicitar paqSol = paquetesSol.get( i ) ;
			
			// obtiene los disponibles
			int disponible = paqSol.getCantidadDisponible( ) ;
			// obtiene los asignados a la cuenta
			int asignados = paqSol.getPackageFromCount( ) ;
			
			// en caso de que haya solicitado mas de los disponibles
			if( asignarInt[ i ] > disponible )
				errors.add( "AsignacionMayorDisponible" , new ActionMessage( "com.mastercard.assets.web.errors.modules.tipocuenta.solicitarpaquetes.RequestGreaterThanAvailable" , new Object[ ]{ new Integer( disponible ) , paqSol.getEvento( ).getNombre( ) , ( ( paqSol.getTipoHabitacion( ) == 1 ) ? "sencilla" : "doble" ) } ) ) ;
			
			// en caos de que haya regresado mas de los asignados
			if( regresarInt[ i ] > asignados )
				errors.add( "RegresadosMayorAsignados" , new ActionMessage( "com.mastercard.assets.web.errors.modules.tipocuenta.solicitarpaquetes.RejectedGreaterThanAsigned" , new Object[ ]{ new Integer( asignados ) , paqSol.getEvento( ).getNombre( ) , ( ( paqSol.getTipoHabitacion( ) == 1 ) ? "sencilla" : "doble" ) } ) ) ;
                                
		}
		
		if( errors.size( ) > 0 )
		{
			UserLogin user = ( UserLogin ) request.getSession( ).getAttribute( "UserLogin" ) ;
			
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/SolicitarPaqueteDesplegarFormulario.jsp" ) ;
			
			request.setAttribute( "SolicitarPaqueteRegistrarForm" , this ) ;
		}
		
		return errors ;
	}

	public int[] getAsignarInt() {
		return asignarInt;
	}

	public int[] getRegresarInt() {
		return regresarInt;
	}
	
	
}
